package jp.co.jalinfotec.sxt.dto;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;

/**
 * メール送信のための情報を保持するBeanです
 */
public class MailBean {

	/**
	 * メール送信者情報
	 */
	private InternetAddress sender;
	
	/**
	 * メールの宛先情報（複数指定が可能です）
	 */
	private ArrayList<InternetAddress> destToList;
	
	/**
	 * メールのタイトル
	 */
	private String msgTitle;
	
	/**
	 * メールの本文
	 */
	private String msgBody;

	/**
	 * メール送信者情報を設定します
	 * @param mailAddress メールアドレス
	 * @throws AddressException 間違ったメール形式を指定したときに発生
	 * @throws UnsupportedEncodingException 送信者表示名のエンコードがサポートされていないときに発生
	 */
	public void setSender(String mailAddress)
	throws AddressException, UnsupportedEncodingException{

		this.setSender(mailAddress, null, null);
	}

	/**
	 * メール送信者情報を設定します
	 * @param mailAddress メールアドレス
	 * @param dispName 送信者表示名
	 * @throws AddressException 間違ったメール形式を指定したときに発生
	 * @throws UnsupportedEncodingException 送信者表示名のエンコードがサポートされていないときに発生
	 */
	public void setSender(String mailAddress, String dispName)
	throws AddressException, UnsupportedEncodingException{

		this.setSender(mailAddress, dispName, null);
	}
	
	/**
	 * メール送信者情報を設定します
	 * @param mailAddress メールアドレス
	 * @param dispName 送信者表示名
	 * @param encoding 送信者表示名のエンコード
	 * @throws AddressException 間違ったメール形式を指定したときに発生
	 * @throws UnsupportedEncodingException 送信者表示名のエンコードがサポートされていないときに発生
	 */
	public void setSender(String mailAddress, String dispName, String encoding)
		throws AddressException, UnsupportedEncodingException{
		
		if (dispName == null || dispName.length() == 0){
			this.sender = new InternetAddress(mailAddress);
		}
		else if (encoding == null || encoding.length() == 0)	{
			this.sender = new InternetAddress(mailAddress, dispName);
		}
		else {
			this.sender = new InternetAddress(mailAddress, dispName, encoding);
		}
	}
	
	/**
	 * メール送信者情報を取得します
	 * @return メール送信者情報
	 */
	public InternetAddress getSender(){
		return this.sender;
	}
	
	/**
	 * メール宛先情報を設定します
	 * @param mailAddress メールアドレス
	 * @throws AddressException 間違ったメール形式を指定したときに発生
	 * @throws UnsupportedEncodingException 送信者表示名のエンコードがサポートされていないときに発生
	 */
	public void addDestToList(String mailAddress)
		throws AddressException, UnsupportedEncodingException{
		
		this.addDestToList(mailAddress, null);
	}
	
	/**
	 * メール宛先情報を設定します
	 * @param mailAddress メールアドレス
	 * @param dispName 宛先表示名
	 * @throws AddressException 間違ったメール形式を指定したときに発生
	 * @throws UnsupportedEncodingException 送信者表示名のエンコードがサポートされていないときに発生
	 */
	public void addDestToList(String mailAddress, String dispName)
		throws AddressException, UnsupportedEncodingException{
		
		// nullの場合は、インスタンスを生成
		if (this.destToList == null){
			this.destToList = new ArrayList<InternetAddress>();
		}
		
		if (dispName == null || dispName.length() == 0){
			this.destToList.add(new InternetAddress(mailAddress));
		}
		else
		{
			this.destToList.add(new InternetAddress(mailAddress, dispName));
		}
	}
	
	/**
	 * メール宛先情報を取得します
	 * @return メール宛先情報の配列<br />nullのこともあります
	 */
	public ArrayList<InternetAddress> getDestToList(){
		return this.destToList;
	}

	/**
	 * メールのタイトルを取得します
	 * @return メールのタイトル
	 */
	public String getMsgTitle() {
		return msgTitle;
	}

	/**
	 * メールのタイトルを設定します
	 * @param msgTitle メールのタイトル
	 */
	public void setMsgTitle(String msgTitle) {
		this.msgTitle = msgTitle;
	}

	/**
	 * メールの本文を取得します
	 * @return メールの本文
	 */
	public String getMsgBody() {
		return msgBody;
	}

	/**
	 * メールの本文を設定します
	 * @param msgBody メールの本文
	 */
	public void setMsgBody(String msgBody) {
		this.msgBody = msgBody;
	}
}
